#include "filelister.h"

// Qt Includes
#include <QtDebug>
#include <QDir>

/////////////////////////////////////////////////////////////////////
// Construction & Destruction
/////////////////////////////////////////////////////////////////////
CFileLister::CFileLister(const QString &strDirectory, const QStringList &slFileExtensions)
	: m_strDirectory(strDirectory),
	  m_slFileExtensions(slFileExtensions)
{

}
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Implementation
/////////////////////////////////////////////////////////////////////
void CFileLister::run()
{
	scanDir(QDir(m_strDirectory));
	m_theDirsRelativeFilePaths.first = m_strDirectory;
	m_theDirsRelativeFilePaths.second = m_slRelativeFilePaths;
}
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////
// Member Functions
/////////////////////////////////////////////////////////////////////
void CFileLister::scanDir(const QDir &theDir)
{
	QStringList slFilePaths;
	const QFileInfoList lstFileInfo = theDir.entryInfoList(m_slFileExtensions,
			QDir::AllDirs | QDir::Files | QDir::NoDotAndDotDot, QDir::Name);

	foreach(QFileInfo theFileInfo, lstFileInfo)
	{
		// If we found a directory, we need to scan that too.
		if(theFileInfo.isDir())
		{
			scanDir(QDir(theFileInfo.absoluteFilePath()));
			continue;
		}

		// Otherwise, just append the file to our collection.
                m_slRelativeFilePaths.append(theFileInfo.fileName());
		m_slAbsoluteFilePaths.append(theFileInfo.absoluteFilePath());
	}
}
/////////////////////////////////////////////////////////////////////
